#ifndef MULTHREAD_H
#define MULTHREAD_H

#include <QThread>
#include <Format.h>
#include <QQueue>
#include "pcap.h"
#include <QString>
#include "winsock2.h"
#include "datapackage.h"


// 定义"multhread"类，该类继承自"QTread",并声明构造函数
class multhread:public QThread
{
    Q_OBJECT
public:
    multhread();
    // 定义了三个公有函数:"setPointer setFlag resetFlag"
    bool setPointer(pcap_t *pointer);
    void setFlag();
    void resetFlag();
    void run() override; // 重载了"run" 该函数将在新线程中执行
    // 定义了五个保护函数，分别处理以太网"IP TCP UDP ARP"数据包
    int ethernetPackageHandle(const u_char *pkt_content, QString&info);
    int ipPackageHandle(const u_char *pkt_content, int&ipPackage);
    int tcpPackageHandle(const u_char *pkt_content, QString&info, int ipPackage);
    int udpPackageHandle(const u_char *pkt_content, QString&info);
    QString dnsPackageHandle(const u_char *pkt_content);
    QString arpPackageHandle(const u_char *pkt_content);
    QString icmpPackageHandle(const u_char *pkt_content);

protected:
    static QString byteToString(u_char *str, int size); // 定义了一个静态保护函数将byteArray字节数组转换为QString
signals:
    void send(Datapackage data); // 定义一个信号"send"，用于发送数据包

private:
    pcap_t *pointer;
    struct pcap_pkthdr *header;
    const u_char *pkt_data;
    time_t local_time_sec;
    struct tm local_time;
    char timeString[16];
    bool isDone;

};

#endif // MULTHREAD_H
